package cn.itsource.blog.controller;

import cn.itsource.blog.domain.Article;
import cn.itsource.blog.query.ArticleQuery;
import cn.itsource.blog.service.IArticleService;
import cn.itsource.util.JSONResult;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/article")
public class ArticleController {

    @Autowired
    private IArticleService articleService;

    /**
     * 新增或修改
     * @param article
     * @return
     */
    // 添加或者修改数据
    @PutMapping
    @ApiOperation(value = "新增或修改")
    // RequestBody前端必须传入json数据
    public JSONResult<Article> save(@RequestBody Article article){
        try {
            if(article.getId()==null){
                // 如果没有id值就是新增
                articleService.add(article);
            }else {
                // 反之为修改
                articleService.updata(article);
            }
            // 打印成功信息
            return JSONResult.ok();
        }catch (Exception e){
            // 打印异常信息在程序中出错的位置及原因
            e.printStackTrace();
            // 打印失败
            return JSONResult.fail();
        }
    }

    /**
     * 删除用户
     * @param id
     * @return
     */
    // 删除指定数据
    @DeleteMapping("/{id}")
    @ApiOperation(value = "删除")
    // 使用PathVariable接受id进行删除数据
    private JSONResult<Article> delete(@PathVariable("id") Long id){
        try {
            // 删除数据
            articleService.delete(id);
            return JSONResult.ok();
        }catch (Exception e){
            // 打印异常信息在程序中出错的位置及原因
            e.printStackTrace();
            return JSONResult.fail();
        }
    }

    /**
     * 查询单个用户
     * @param id
     * @return
     */
    // 查询指定数据
    @GetMapping("/{id}")
    @ApiOperation(value = "查询指定用户")
    // 使用PathVariable接受id进行删除数据
    private JSONResult<Article> get(@PathVariable("id") Long id){
        try {
            // 查询指定信息并打印信息
            return JSONResult.ok(articleService.get(id));
        }catch (Exception e){
            // 打印异常信息在程序中出错的位置及原因
            e.printStackTrace();
            return JSONResult.fail();
        }
    }

    /**
     * 查询所有用户
     * @return
     */
    // 查询所有信息
    @GetMapping
    @ApiOperation(value = "查询所有用户")
    public JSONResult<Article> gteAll(){
        try {
            // 打印出所有的数据
            return JSONResult.ok(articleService.getAll());
        }catch (Exception e){
            // 打印异常信息在程序中出错的位置及原因
            e.printStackTrace();
            return JSONResult.fail();
        }
    }

    /**
     * 批量删除
     * @param ids
     * @return
     */
    // 批量删除
    @PatchMapping("/dels")
    @ApiOperation(value = "批量删除")
    public JSONResult delPatch(@RequestBody Long[] ids){
        try {
            //
            articleService.delPatch(ids);
            // 返回成功信息
            return JSONResult.ok();
        }catch (Exception e){
            // 错误信息
            e.printStackTrace();
            // 返回胡弄人失败信息
            return JSONResult.fail("网络异常，请稍后重试");
        }
    }

    /**
     * 分页/高级查询
     * @param articleQuery
     * @return
     */
    @PostMapping
    @ApiOperation(value = "分页/高级查询")
    public JSONResult<PageInfo<Article>> pageInfo(@RequestBody ArticleQuery articleQuery){
        try {
            // 根据传入的当前页和每页条数进行分页查询
            return JSONResult.ok(articleService.pageInfo(articleQuery));
        }catch (Exception e){
            e.printStackTrace();
            // 返回失败信息
            return JSONResult.fail("网络异常，请稍后重试");
        }
    }



}
